package model;

public class Jugador {

	private Rango rango;
	private int tiempoDeCasoEnHoras;
	private Ciudad ciudadActual;
	private Lugar lugarActual;
	private int cantidadDeLugaresVisitados;
	private Descripcion posibleLadron;
	private OrdenDeArresto orden;
	

	public Jugador(Rango unRango, int horasDelCaso) {
		this.rango = unRango;
		this.tiempoDeCasoEnHoras = horasDelCaso;
		this.ciudadActual = null;	
		this.lugarActual = null;
		this.orden = null;
		this.cantidadDeLugaresVisitados = 0;
		this.posibleLadron = new Descripcion();
	}

	public void assignarHorasDelCaso(int horas){
		this.tiempoDeCasoEnHoras = horas;
	}
	
	public Pista obtenerPista(Lugar lug) {
		return this.rango.obtenerPista(lug);
	}

	public void actualizarDescripcion(Descripcion unaDescripcion){
		this.posibleLadron = unaDescripcion;
	}

	public Descripcion obtenerDescripcionPosibleLadron() {
		return this.posibleLadron;
	}
	
	public OrdenDeArresto obtenerOrden(){
		return this.orden;
	}
	
	public int obtenerTiempoDelCaso() {
		return tiempoDeCasoEnHoras;
	}
	
	public Lugar obtenerLugarActual(){
		return this.lugarActual;
	}

	public Ciudad obtenerCiudadActual(){
		return this.ciudadActual;
	}
	
	public void setRango(Rango unRango) {
		this.rango = unRango;
	}
	//Para poder setear donde empieza el Jugador
	public void setCiudadInicial(Ciudad unaCiudad){
		this.ciudadActual = unaCiudad;
	}
	
	public int viajarACiudad(Ciudad unaCiudad) {
		int distancia = unaCiudad.calcularDistanciaA(ciudadActual);
		int horasDeViaje = this.rango.viajar(distancia);
		this.tiempoDeCasoEnHoras -= horasDeViaje;
		this.ciudadActual = unaCiudad;
		this.cantidadDeLugaresVisitados = 0;
		this.lugarActual = null;
		return horasDeViaje;
	}

	public int irALugar(Lugar unLugar){
		this.lugarActual = unLugar;
		this.cantidadDeLugaresVisitados += 1;
		if (this.cantidadDeLugaresVisitados > 3){this.cantidadDeLugaresVisitados = 3;}
		this.tiempoDeCasoEnHoras -= this.cantidadDeLugaresVisitados;
		return this.cantidadDeLugaresVisitados;
	}

	public void emitirOrdenDeArresto(Jefatura unaJefatura){
		this.orden = unaJefatura.emitirOrden(this.posibleLadron);
		this.tiempoDeCasoEnHoras -= 3;
		}

	public OrdenDeArresto presentarOrdenDeArresto(){
		return this.orden;
	}

	public int acuchillar() {
		this.tiempoDeCasoEnHoras -= 2;
		return 2;
	}

	public int disparar() {
		this.tiempoDeCasoEnHoras -= 4;
		return 4;
	}

	public void dormir() {
		this.tiempoDeCasoEnHoras -= 8;
	}
}
